总结
ag
常用指令:
--depth
: 最大层级-f
: 包含符号链接。默认是False
-g
: 打印与PATTERN
匹配的文件名。类似find -name
-G
: 仅搜索与PATTERN匹配的文件中的内容,后面还需要加上需要搜索的内容--ignore-dir
: 忽略文件-c
: 文本匹配数 不是行数,而是匹配数
提问
- [x] 1. 如何找到当前目录及所有子目录下文件内容包含
hello
的文件ag 'hello'
1. 前提提要、场景
如果我们只知道文件内容,想要找出这个文件在哪,find
就无能为力了,可以使用 ag
,可以根据内容文件搜索文件。Ubuntu >= 13.10 (Saucy) or Debian >= 8 (Jessie)
安装: apt-get install silversearcher-ag
其他版本安装可参考文档
2. ag <content> 根据文件内容搜索
sh
$ ag ': "Tab"'
sh
# --depth: 最大层级
# -A --after: 打印匹配项之后的行数。如果不提供行数,使用这个参数的话,就默认显示匹配项之后的2行
# -B --before: 打印匹配项之前的行数。如果不提供行数,使用这个参数的话,就默认显示匹配项之前的2行
# -C --context: 打印匹配项上下文的行数。默认显示2行
$ ag --depth 1 'main'
# -f --[no]follow: 包含符号链接。默认是False.
$ ag -f 'main'
# -g: 打印与PATTERN匹配的文件名。类似 find -name
$ ag -g '.json'
package.json
package.hard.json
package-lock.json
# -G --file-search-regex: 仅搜索与PATTERN匹配的文件中的内容,后面还需要加上需要搜索的内容
$ ag -G 'package.json' 'firefly'
# --ignore-dir: 忽略文件
$ ag --ignore-dir 'node_modules' 'main'
# -c --count: 文本匹配数 不是行数,而是匹配数
$ ag --depth 0 -c 'firefly'
package.json:2
package.hard.json:2
package-lock.json:2
2. git grep 据文件内容搜索
git
自带的内容搜索,具体可以使用 man git grep
查看文档
sh
# --max-depth: 最大层级
$ git grep --max-depth 0 'Fire'
package-lock.json: "name": "Firefly_blog",
package-lock.json: "name": "Firefly_blog",
package.hard.json: "description": "Firefly's blog",
package.hard.json: "author": "Firefly",
package.json: "description": "Firefly's blog",
package.json: "author": "Firefly",